import os
import subprocess
from os.path import dirname, join
# Access EDS
import requests
# Access AWS S3
import boto3
import s3fs
# Read and work with datasets
import pandas as pd
import numpy as np
import xarray as xr
# Plotting
import hvplot.xarray
import matplotlib.pyplot as plt
import cartopy
import cartopy.crs as ccrs
import cartopy.feature as cfeatAccessing Multiple NetCDF4/HDF5 Files - S3 Direct Access
Getting Started
In this notebook, we will access monthly sea surface height from ECCO V4r4 (10.5067/ECG5D-SSH44). The data are provided as a time series of monthly netCDFs on a 0.5-degree latitude/longitude grid.
We will access the data from inside the AWS cloud (us-west-2 region, specifically) and load a time series made of multiple netCDF datasets into a single xarray dataset. This approach leverages S3 native protocols for efficient access to the data.
Requirements
AWS
This notebook should be running in an EC2 instance in AWS region us-west-2, as previously mentioned. We recommend using an EC2 with at least 8GB of memory available.
The notebook was developed and tested using a t2.small instance (_ CPUs; 8GB memory). Python 3
Most of these imports are from the Python standard library. However, you will need to install these packages into your Python 3 environment if you have not already done so:
- s3fs
- requests
- pandas
- xarray
- matplotlib
- cartopy
Learning Objectives
- import needed libraries
- define dataset of interest
- authenticate for NASA Earthdata archive (Earthdata Login)
- obtain AWS credentials for Earthdata DAAC archive in AWS S3
- access DAAC data directly from the in-region S3 bucket without moving or downloading any files to your local (cloud) workspace
- plot the first time step in the data
AWS credentials to Access Data from S3
Pass credentials and configuration to AWS so we can interact with S3 objects from applicable buckets. For now, each DAAC has different AWS credentials endpoints. LP DAAC and PO.DAAC are listed here:
s3_cred_endpoint = {
'podaac':'https://archive.podaac.earthdata.nasa.gov/s3credentials',
'gesdisc': 'https://data.gesdisc.earthdata.nasa.gov/s3credentials',
'lpdaac':'https://data.lpdaac.earthdatacloud.nasa.gov/s3credentials',
'ornldaac': 'https://data.ornldaac.earthdata.nasa.gov/s3credentials',
'ghrcdaac': 'https://data.ghrc.earthdata.nasa.gov/s3credentials'
}def get_temp_creds(provider):
return requests.get(s3_cred_endpoint[provider]).json()temp_creds_req = get_temp_creds('podaac')
#temp_creds_reqSet up an s3fs session for authneticated access to ECCO netCDF files in s3:
fs_s3 = s3fs.S3FileSystem(anon=False,
key=temp_creds_req['accessKeyId'],
secret=temp_creds_req['secretAccessKey'],
token=temp_creds_req['sessionToken'],
client_kwargs={'region_name':'us-west-2'})In this example we’re interested in the ECCO data collection from PO.DAAC in Earthdata Cloud in AWS S3, so we specify the podaac endpoint in the next code block.
Define dataset of interest
In this case it’s the following string that unique identifies the collection of monthly, 0.5-degree sea surface height data.
short_name = "ECCO_L4_SSH_05DEG_MONTHLY_V4R4"Get a list of netCDF files located at the S3 path corresponding to the ECCO V4r4 monthly sea surface height dataset on the 0.5-degree latitude/longitude grid, for year 2015.
ssh_files = fs_s3.glob(join('podaac-ops-cumulus-protected/', short_name, '*2015*.nc'))
ssh_files['podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-01_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-02_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-03_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-04_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-05_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-06_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-07_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-08_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-09_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-10_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-11_ECCO_V4r4_latlon_0p50deg.nc',
'podaac-ops-cumulus-protected/ECCO_L4_SSH_05DEG_MONTHLY_V4R4/SEA_SURFACE_HEIGHT_mon_mean_2015-12_ECCO_V4r4_latlon_0p50deg.nc']
Access in-region S3 cloud data without moving files
Now that we have authenticated in AWS, this next code block accesses data directly from the NASA Earthdata archive in an S3 bucket in us-west-2 region, without downloading or moving any files into your user cloud workspace (instnace).
Open with the netCDF files using the s3fs package, then load them all at once into a concatenated xarray dataset.
# Iterate through remote_files to create a fileset
fileset = [fs_s3.open(file) for file in ssh_files]ssh_ds = xr.open_mfdataset(fileset,
combine='by_coords',
mask_and_scale=True,
decode_cf=True,
chunks='auto')
ssh_ds<xarray.Dataset>
Dimensions: (time: 12, latitude: 360, longitude: 720, nv: 2)
Coordinates:
* time (time) datetime64[ns] 2015-01-16T12:00:00 ... 2015-12-16T...
* latitude (latitude) float32 -89.75 -89.25 -88.75 ... 89.25 89.75
* longitude (longitude) float32 -179.8 -179.2 -178.8 ... 179.2 179.8
time_bnds (time, nv) datetime64[ns] dask.array<chunksize=(1, 2), meta=np.ndarray>
latitude_bnds (latitude, nv) float32 dask.array<chunksize=(360, 2), meta=np.ndarray>
longitude_bnds (longitude, nv) float32 dask.array<chunksize=(720, 2), meta=np.ndarray>
Dimensions without coordinates: nv
Data variables:
SSH (time, latitude, longitude) float32 dask.array<chunksize=(1, 360, 720), meta=np.ndarray>
SSHIBC (time, latitude, longitude) float32 dask.array<chunksize=(1, 360, 720), meta=np.ndarray>
SSHNOIBC (time, latitude, longitude) float32 dask.array<chunksize=(1, 360, 720), meta=np.ndarray>
Attributes: (12/57)
acknowledgement: This research was carried out by the Jet Pr...
author: Ian Fenty and Ou Wang
cdm_data_type: Grid
comment: Fields provided on a regular lat-lon grid. ...
Conventions: CF-1.8, ACDD-1.3
coordinates_comment: Note: the global 'coordinates' attribute de...
... ...
time_coverage_duration: P1M
time_coverage_end: 2015-02-01T00:00:00
time_coverage_resolution: P1M
time_coverage_start: 2015-01-01T00:00:00
title: ECCO Sea Surface Height - Monthly Mean 0.5 ...
uuid: 088d03b8-4158-11eb-876b-0cc47a3f47f1- time: 12
- latitude: 360
- longitude: 720
- nv: 2
- time(time)datetime64[ns]2015-01-16T12:00:00 ... 2015-12-...
- axis :
- T
- bounds :
- time_bnds
- coverage_content_type :
- coordinate
- long_name :
- center time of averaging period
- standard_name :
- time
array(['2015-01-16T12:00:00.000000000', '2015-02-15T00:00:00.000000000', '2015-03-16T12:00:00.000000000', '2015-04-16T00:00:00.000000000', '2015-05-16T12:00:00.000000000', '2015-06-16T00:00:00.000000000', '2015-07-16T12:00:00.000000000', '2015-08-16T12:00:00.000000000', '2015-09-16T00:00:00.000000000', '2015-10-16T12:00:00.000000000', '2015-11-16T00:00:00.000000000', '2015-12-16T12:00:00.000000000'], dtype='datetime64[ns]') - latitude(latitude)float32-89.75 -89.25 ... 89.25 89.75
- axis :
- Y
- bounds :
- latitude_bnds
- comment :
- uniform grid spacing from -89.75 to 89.75 by 0.5
- coverage_content_type :
- coordinate
- long_name :
- latitude at grid cell center
- standard_name :
- latitude
- units :
- degrees_north
array([-89.75, -89.25, -88.75, ..., 88.75, 89.25, 89.75], dtype=float32)
- longitude(longitude)float32-179.8 -179.2 ... 179.2 179.8
- axis :
- X
- bounds :
- longitude_bnds
- comment :
- uniform grid spacing from -179.75 to 179.75 by 0.5
- coverage_content_type :
- coordinate
- long_name :
- longitude at grid cell center
- standard_name :
- longitude
- units :
- degrees_east
array([-179.75, -179.25, -178.75, ..., 178.75, 179.25, 179.75], dtype=float32) - time_bnds(time, nv)datetime64[ns]dask.array<chunksize=(1, 2), meta=np.ndarray>
- comment :
- Start and end times of averaging period.
- coverage_content_type :
- coordinate
- long_name :
- time bounds of averaging period
Array Chunk Bytes 192 B 16 B Shape (12, 2) (1, 2) Count 36 Tasks 12 Chunks Type datetime64[ns] numpy.ndarray - latitude_bnds(latitude, nv)float32dask.array<chunksize=(360, 2), meta=np.ndarray>
- coverage_content_type :
- coordinate
- long_name :
- latitude bounds grid cells
Array Chunk Bytes 2.81 kiB 2.81 kiB Shape (360, 2) (360, 2) Count 55 Tasks 1 Chunks Type float32 numpy.ndarray - longitude_bnds(longitude, nv)float32dask.array<chunksize=(720, 2), meta=np.ndarray>
- coverage_content_type :
- coordinate
- long_name :
- longitude bounds grid cells
Array Chunk Bytes 5.62 kiB 5.62 kiB Shape (720, 2) (720, 2) Count 55 Tasks 1 Chunks Type float32 numpy.ndarray
- SSH(time, latitude, longitude)float32dask.array<chunksize=(1, 360, 720), meta=np.ndarray>
- coverage_content_type :
- modelResult
- long_name :
- Dynamic sea surface height anomaly
- standard_name :
- sea_surface_height_above_geoid
- units :
- m
- comment :
- Dynamic sea surface height anomaly above the geoid, suitable for comparisons with altimetry sea surface height data products that apply the inverse barometer (IB) correction. Note: SSH is calculated by correcting model sea level anomaly ETAN for three effects: a) global mean steric sea level changes related to density changes in the Boussinesq volume-conserving model (Greatbatch correction, see sterGloH), b) the inverted barometer (IB) effect (see SSHIBC) and c) sea level displacement due to sea-ice and snow pressure loading (see sIceLoad). SSH can be compared with the similarly-named SSH variable in previous ECCO products that did not include atmospheric pressure loading (e.g., Version 4 Release 3). Use SSHNOIBC for comparisons with altimetry data products that do NOT apply the IB correction.
- valid_min :
- [-1.88057721]
- valid_max :
- [1.42077196]
Array Chunk Bytes 11.87 MiB 0.99 MiB Shape (12, 360, 720) (1, 360, 720) Count 36 Tasks 12 Chunks Type float32 numpy.ndarray - SSHIBC(time, latitude, longitude)float32dask.array<chunksize=(1, 360, 720), meta=np.ndarray>
- coverage_content_type :
- modelResult
- long_name :
- The inverted barometer (IB) correction to sea surface height due to atmospheric pressure loading
- units :
- m
- comment :
- Not an SSH itself, but a correction to model sea level anomaly (ETAN) required to account for the static part of sea surface displacement by atmosphere pressure loading: SSH = SSHNOIBC - SSHIBC. Note: Use SSH for model-data comparisons with altimetry data products that DO apply the IB correction and SSHNOIBC for comparisons with altimetry data products that do NOT apply the IB correction.
- valid_min :
- [-0.3014482]
- valid_max :
- [0.52456337]
Array Chunk Bytes 11.87 MiB 0.99 MiB Shape (12, 360, 720) (1, 360, 720) Count 36 Tasks 12 Chunks Type float32 numpy.ndarray - SSHNOIBC(time, latitude, longitude)float32dask.array<chunksize=(1, 360, 720), meta=np.ndarray>
- coverage_content_type :
- modelResult
- long_name :
- Sea surface height anomaly without the inverted barometer (IB) correction
- units :
- m
- comment :
- Sea surface height anomaly above the geoid without the inverse barometer (IB) correction, suitable for comparisons with altimetry sea surface height data products that do NOT apply the inverse barometer (IB) correction. Note: SSHNOIBC is calculated by correcting model sea level anomaly ETAN for two effects: a) global mean steric sea level changes related to density changes in the Boussinesq volume-conserving model (Greatbatch correction, see sterGloH), b) sea level displacement due to sea-ice and snow pressure loading (see sIceLoad). In ECCO Version 4 Release 4 the model is forced with atmospheric pressure loading. SSHNOIBC does not correct for the static part of the effect of atmosphere pressure loading on sea surface height (the so-called inverse barometer (IB) correction). Use SSH for comparisons with altimetry data products that DO apply the IB correction.
- valid_min :
- [-1.66542721]
- valid_max :
- [1.4550364]
Array Chunk Bytes 11.87 MiB 0.99 MiB Shape (12, 360, 720) (1, 360, 720) Count 36 Tasks 12 Chunks Type float32 numpy.ndarray
- acknowledgement :
- This research was carried out by the Jet Propulsion Laboratory, managed by the California Institute of Technology under a contract with the National Aeronautics and Space Administration.
- author :
- Ian Fenty and Ou Wang
- cdm_data_type :
- Grid
- comment :
- Fields provided on a regular lat-lon grid. They have been mapped to the regular lat-lon grid from the original ECCO lat-lon-cap 90 (llc90) native model grid. SSH (dynamic sea surface height) = SSHNOIBC (dynamic sea surface without the inverse barometer correction) - SSHIBC (inverse barometer correction). The inverted barometer correction accounts for variations in sea surface height due to atmospheric pressure variations.
- Conventions :
- CF-1.8, ACDD-1.3
- coordinates_comment :
- Note: the global 'coordinates' attribute describes auxillary coordinates.
- creator_email :
- ecco-group@mit.edu
- creator_institution :
- NASA Jet Propulsion Laboratory (JPL)
- creator_name :
- ECCO Consortium
- creator_type :
- group
- creator_url :
- https://ecco-group.org
- date_created :
- 2020-12-18T09:39:51
- date_issued :
- 2020-12-18T09:39:51
- date_metadata_modified :
- 2021-03-15T22:07:49
- date_modified :
- 2021-03-15T22:07:49
- geospatial_bounds_crs :
- EPSG:4326
- geospatial_lat_max :
- [90.]
- geospatial_lat_min :
- [-90.]
- geospatial_lat_resolution :
- [0.5]
- geospatial_lat_units :
- degrees_north
- geospatial_lon_max :
- [180.]
- geospatial_lon_min :
- [-180.]
- geospatial_lon_resolution :
- [0.5]
- geospatial_lon_units :
- degrees_east
- history :
- Inaugural release of an ECCO Central Estimate solution to PO.DAAC
- id :
- 10.5067/ECG5M-SSH44
- institution :
- NASA Jet Propulsion Laboratory (JPL)
- instrument_vocabulary :
- GCMD instrument keywords
- keywords :
- EARTH SCIENCE > OCEANS > SEA SURFACE TOPOGRAPHY > SEA SURFACE HEIGHT, EARTH SCIENCE SERVICES > MODELS > EARTH SCIENCE REANALYSES/ASSIMILATION MODELS
- keywords_vocabulary :
- NASA Global Change Master Directory (GCMD) Science Keywords
- license :
- Public Domain
- metadata_link :
- https://cmr.earthdata.nasa.gov/search/collections.umm_json?ShortName=ECCO_L4_SSH_05DEG_MONTHLY_V4R4
- naming_authority :
- gov.nasa.jpl
- platform :
- ERS-1/2, TOPEX/Poseidon, Geosat Follow-On (GFO), ENVISAT, Jason-1, Jason-2, CryoSat-2, SARAL/AltiKa, Jason-3, AVHRR, Aquarius, SSM/I, SSMIS, GRACE, DTU17MDT, Argo, WOCE, GO-SHIP, MEOP, Ice Tethered Profilers (ITP)
- platform_vocabulary :
- GCMD platform keywords
- processing_level :
- L4
- product_name :
- SEA_SURFACE_HEIGHT_mon_mean_2015-01_ECCO_V4r4_latlon_0p50deg.nc
- product_time_coverage_end :
- 2018-01-01T00:00:00
- product_time_coverage_start :
- 1992-01-01T12:00:00
- product_version :
- Version 4, Release 4
- program :
- NASA Physical Oceanography, Cryosphere, Modeling, Analysis, and Prediction (MAP)
- project :
- Estimating the Circulation and Climate of the Ocean (ECCO)
- publisher_email :
- podaac@podaac.jpl.nasa.gov
- publisher_institution :
- PO.DAAC
- publisher_name :
- Physical Oceanography Distributed Active Archive Center (PO.DAAC)
- publisher_type :
- institution
- publisher_url :
- https://podaac.jpl.nasa.gov
- references :
- ECCO Consortium, Fukumori, I., Wang, O., Fenty, I., Forget, G., Heimbach, P., & Ponte, R. M. 2020. Synopsis of the ECCO Central Production Global Ocean and Sea-Ice State Estimate (Version 4 Release 4). doi:10.5281/zenodo.3765928
- source :
- The ECCO V4r4 state estimate was produced by fitting a free-running solution of the MITgcm (checkpoint 66g) to satellite and in situ observational data in a least squares sense using the adjoint method
- standard_name_vocabulary :
- NetCDF Climate and Forecast (CF) Metadata Convention
- summary :
- This dataset provides monthly-averaged dynamic sea surface height interpolated to a regular 0.5-degree grid from the ECCO Version 4 Release 4 (V4r4) ocean and sea-ice state estimate. Estimating the Circulation and Climate of the Ocean (ECCO) state estimates are dynamically and kinematically-consistent reconstructions of the three-dimensional, time-evolving ocean, sea-ice, and surface atmospheric states. ECCO V4r4 is a free-running solution of a global, nominally 1-degree configuration of the MIT general circulation model (MITgcm) that has been fit to observations in a least-squares sense. Observational data constraints used in V4r4 include sea surface height (SSH) from satellite altimeters [ERS-1/2, TOPEX/Poseidon, GFO, ENVISAT, Jason-1,2,3, CryoSat-2, and SARAL/AltiKa]; sea surface temperature (SST) from satellite radiometers [AVHRR], sea surface salinity (SSS) from the Aquarius satellite radiometer/scatterometer, ocean bottom pressure (OBP) from the GRACE satellite gravimeter; sea-ice concentration from satellite radiometers [SSM/I and SSMIS], and in-situ ocean temperature and salinity measured with conductivity-temperature-depth (CTD) sensors and expendable bathythermographs (XBTs) from several programs [e.g., WOCE, GO-SHIP, Argo, and others] and platforms [e.g., research vessels, gliders, moorings, ice-tethered profilers, and instrumented pinnipeds]. V4r4 covers the period 1992-01-01T12:00:00 to 2018-01-01T00:00:00.
- time_coverage_duration :
- P1M
- time_coverage_end :
- 2015-02-01T00:00:00
- time_coverage_resolution :
- P1M
- time_coverage_start :
- 2015-01-01T00:00:00
- title :
- ECCO Sea Surface Height - Monthly Mean 0.5 Degree (Version 4 Release 4)
- uuid :
- 088d03b8-4158-11eb-876b-0cc47a3f47f1
ssh_da = ssh_ds.SSH
ssh_da<xarray.DataArray 'SSH' (time: 12, latitude: 360, longitude: 720)>
dask.array<concatenate, shape=(12, 360, 720), dtype=float32, chunksize=(1, 360, 720), chunktype=numpy.ndarray>
Coordinates:
* time (time) datetime64[ns] 2015-01-16T12:00:00 ... 2015-12-16T12:00:00
* latitude (latitude) float32 -89.75 -89.25 -88.75 ... 88.75 89.25 89.75
* longitude (longitude) float32 -179.8 -179.2 -178.8 ... 178.8 179.2 179.8
Attributes:
coverage_content_type: modelResult
long_name: Dynamic sea surface height anomaly
standard_name: sea_surface_height_above_geoid
units: m
comment: Dynamic sea surface height anomaly above the geoi...
valid_min: [-1.88057721]
valid_max: [1.42077196]- time: 12
- latitude: 360
- longitude: 720
- dask.array<chunksize=(1, 360, 720), meta=np.ndarray>
Array Chunk Bytes 11.87 MiB 0.99 MiB Shape (12, 360, 720) (1, 360, 720) Count 36 Tasks 12 Chunks Type float32 numpy.ndarray - time(time)datetime64[ns]2015-01-16T12:00:00 ... 2015-12-...
- axis :
- T
- bounds :
- time_bnds
- coverage_content_type :
- coordinate
- long_name :
- center time of averaging period
- standard_name :
- time
array(['2015-01-16T12:00:00.000000000', '2015-02-15T00:00:00.000000000', '2015-03-16T12:00:00.000000000', '2015-04-16T00:00:00.000000000', '2015-05-16T12:00:00.000000000', '2015-06-16T00:00:00.000000000', '2015-07-16T12:00:00.000000000', '2015-08-16T12:00:00.000000000', '2015-09-16T00:00:00.000000000', '2015-10-16T12:00:00.000000000', '2015-11-16T00:00:00.000000000', '2015-12-16T12:00:00.000000000'], dtype='datetime64[ns]') - latitude(latitude)float32-89.75 -89.25 ... 89.25 89.75
- axis :
- Y
- bounds :
- latitude_bnds
- comment :
- uniform grid spacing from -89.75 to 89.75 by 0.5
- coverage_content_type :
- coordinate
- long_name :
- latitude at grid cell center
- standard_name :
- latitude
- units :
- degrees_north
array([-89.75, -89.25, -88.75, ..., 88.75, 89.25, 89.75], dtype=float32)
- longitude(longitude)float32-179.8 -179.2 ... 179.2 179.8
- axis :
- X
- bounds :
- longitude_bnds
- comment :
- uniform grid spacing from -179.75 to 179.75 by 0.5
- coverage_content_type :
- coordinate
- long_name :
- longitude at grid cell center
- standard_name :
- longitude
- units :
- degrees_east
array([-179.75, -179.25, -178.75, ..., 178.75, 179.25, 179.75], dtype=float32)
- coverage_content_type :
- modelResult
- long_name :
- Dynamic sea surface height anomaly
- standard_name :
- sea_surface_height_above_geoid
- units :
- m
- comment :
- Dynamic sea surface height anomaly above the geoid, suitable for comparisons with altimetry sea surface height data products that apply the inverse barometer (IB) correction. Note: SSH is calculated by correcting model sea level anomaly ETAN for three effects: a) global mean steric sea level changes related to density changes in the Boussinesq volume-conserving model (Greatbatch correction, see sterGloH), b) the inverted barometer (IB) effect (see SSHIBC) and c) sea level displacement due to sea-ice and snow pressure loading (see sIceLoad). SSH can be compared with the similarly-named SSH variable in previous ECCO products that did not include atmospheric pressure loading (e.g., Version 4 Release 3). Use SSHNOIBC for comparisons with altimetry data products that do NOT apply the IB correction.
- valid_min :
- [-1.88057721]
- valid_max :
- [1.42077196]
ssh_da.hvplot.image(y='latitude', x='longitude', cmap='Viridis',).opts(clim=(ssh_da.attrs['valid_min'][0],ssh_da.attrs['valid_max'][0]))Unable to display output for mime type(s):